﻿// See https://aka.ms/new-console-template for more information
//单例模式：控制一个类只有一个实例
//例如控制共享资源的访问权限（如数据库或文件），保证同一时间只能有一个人访问，保证数据的一致性

//解决方案：为该实例提供一个全局访问节点
//将默认构造函数设为私有，防止其他对象使用单例类的new运算符
//新建一个静态构造方法作为构造函数，该函数会“偷偷”调用私有构造函数来创建对象，并将其保存在一个静态成员变量中。此后所有对该函数的调用都将返回这一缓存对象
//如果你的代码能够访问单例类，那他就能调用单例类的静态方法，无论何时调用该方法，他总是会返回相同的对象。

SingLeton s1 = SingLeton.GetInstance();
SingLeton s2 = SingLeton.GetInstance();

if (s1 == s2)
{
    Console.WriteLine("Singleton works, both variables contain the same instance.");
}
else
{
    Console.WriteLine("Singleton failed, variables contain different instances.");
}

public sealed class SingLeton
{
    private SingLeton()
    { }

    private static SingLeton _instance;

    public static SingLeton GetInstance()
    {
        if (_instance == null)
            _instance = new SingLeton();
        return _instance;
    }

    public void someBusinessLogic()
    {
        // ...
    }
}